package com.huike.common.core.domain.model;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;

public class splitMonths {
    /**
     * 传入俩个时间计算期间包含几个开始日期到结束日期
     * 年-月-日格式
     */
    public static ArrayList<String> getDateInterval(Date begin, Date end) {
        //设置输出格式为年+月+日。
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

        //创建一个list集合用来接收所有的String类型的时间
        ArrayList<String> arrayList = new ArrayList<>();

        // 开始日期等于结束日期，返回开始日期（两个都可以）
        //大于则代表begin的日期大于end的日期，代表有问题
        //小于则是正常传入的数据，可以正常进行下面代码
        if (begin.compareTo(end)==0){
            arrayList.add(sdf.format(begin));
            return arrayList;
        }
        if(begin.compareTo(end)>0){
            return null;
        }

        //设置开始时间为Calendar类型的数据
        Calendar cal_begin = Calendar.getInstance();
        cal_begin.setTime(begin);

        //设置结束时间为Calendar类型的数据
        Calendar cal_end = Calendar.getInstance();
        cal_end.setTime(end);

        while (true) {

            //如果设置的开始年份等于设置的结束年份，设置的开始月份等于结束的开始月份，设置的开始天数大于结束的开始天数，就结束循环
            if (cal_begin.get(Calendar.YEAR) == cal_end.get(Calendar.YEAR) && cal_begin.get(Calendar.MONTH) == cal_end.get(Calendar.MONTH)
            && cal_begin.get(Calendar.DAY_OF_MONTH) > cal_end.get(Calendar.DAY_OF_MONTH)) {
                break;
            }

            //将变更之后的开始年份和开始月份按照指定的格式拼成字符串，"2021-03-08"  格式化为这种格式
            String str_begin = sdf.format(cal_begin.getTime());


            //将开始月份+1天
            cal_begin.add(Calendar.DAY_OF_MONTH, 1);

            //将变更后的年月日添加到集合中
            arrayList.add(str_begin);
        }
        return arrayList;
    }
}
